from pyecharts.charts import Bar,Line,Pie,Tab,Timeline

from pyecharts import options as opts

# 内置主题类型可查看 pyecharts.globals.ThemeType
from pyecharts.globals import ThemeType
#表格组件
from pyecharts.components import Table
from pyecharts.options import ComponentTitleOpts
import pandas as pd
import os
'''
1.1添加了y轴坐标线，减小了不同系列的柱间距离,添加了表格的Tab
1.2β添加了Pie饼图，调整了饼图的排版
'''
path=os.getcwd()
file=os.listdir(path)
df=pd.read_excel(path+'\\'+file[0],dtype="object")
x=df.columns.values.tolist()[1:]
y=df.loc[0].tolist()[1:]
(max_row,max_col)=df.shape
#V1版本开始支持链式调用
#InitOpts初始化配置
bar1=(
     Bar(init_opts=opts.InitOpts(width='1920px',
                                 height='860px',
                                 page_title="公司名称", 
                                 )
         )
        .add_xaxis(x)
##        .add_yaxis(df.loc[0].tolist()[0],y)
#全局配置
        .set_global_opts(title_opts=\
        opts.TitleOpts(title="公司资源统计",subtitle="福州区域"+file[0][:10]),
        #区域缩放配置项，同时"slider"与"inside"
        datazoom_opts=[opts.DataZoomOpts(),opts.DataZoomOpts(type_="inside"),],
        #提示框配置项
        tooltip_opts=opts.TooltipOpts(is_show=True,trigger="item",trigger_on="mousemove|click"),
        #坐标轴指示器配置项
        axispointer_opts=opts.AxisPointerOpts(is_show=True,type_="shadow"),
        #y轴轴线设置，SplitLineOpts显示轴线
        yaxis_opts=opts.AxisOpts(splitline_opts=opts.SplitLineOpts(is_show=True)),
                                 )
     )
#循环添加行数据，gap为不同系列的柱间距离
for i in range(0,max_row):
    bar1=bar1.add_yaxis(df.loc[i].tolist()[0],df.loc[i].tolist()[1:],gap="0%", )
#工具箱
#bar1.set_global_opts(toolbox_opts=opts.ToolboxOpts(is_show=True))
##bar1.render('中联立信乐呵资源.html')
#==============添加Dataset_pie数据集饼图==============
def pie_base()->Pie():
    global pie_data_nested
    #初始化list,创建嵌套列表
    pie_data_nested=[]
    pie_data_nested.append(df.columns.values.tolist())
    #将dataframe的数据变为数据集
    for i in range(0,max_row):
        pie_data_nested.append(df.loc[i].tolist())
    #初始化饼图，添加数据集
    pie_chart=(
        Pie(init_opts=opts.InitOpts(width='2560px',height='1080px'))
       .add_dataset(source=pie_data_nested)
        )    
    #传递Pie位置信息参数
    def pie_pos():
        if 0<=i<=6:
            return [str(11+11*i)+"%",str(25)+"%"]
        elif 6<i<=13 :
            return [str(11*(i-6))+"%",str(50)+"%"]
        else:
            return [str(11*(i-13))+"%",str(75)+"%"]
    #1.2之后可以优化写法，将series_name和encode换成在数据集pie_data_nested中的循环
    #循换添加dataframe的数据
    for i in range(0,max_col-1):
        pie_chart=pie_chart.add(
            series_name=df.columns.values.tolist()[1:][i],
            data_pair=[],
            #饼图大小
            radius=60,
            #放置饼图位置，[x,y]控制坐标
            center=pie_pos(),
            encode={"itemName":df.columns.values.tolist()[0], "value":df.columns.values.tolist()[i+1]},)
        pie_chart.set_global_opts(title_opts=opts.TitleOpts(title="公司资源统计",subtitle="福州区域"+file[0][:10]),
        #滚动翻页的图例,对于容器高宽10%       
        legend_opts=opts.LegendOpts(type_="scroll",pos_left="10%"),
        )
    return pie_chart
#===============添加Table表格==============
def table_base()->Table:
    table_chart=Table()
    #初始化list,创建嵌套列表
    nested_list=[]
    for i in range(0,max_row):
        nested_list.append(df.loc[i].tolist())
    table_chart.add(df.columns.values.tolist(),nested_list)
    table_chart.set_global_opts(
    title_opts=ComponentTitleOpts(title="Table-基本示例",\
                                  subtitle="我是副标题支持换行哦"))
    return table_chart
#==============添加时间线===============
def tt()->Timeline:
    tl=Timeline(init_opts=opts.InitOpts(width='1920%',height='720%'))
    #垂直,左边距离,垂直高度
    tl.add_schema(orient="vertical",pos_left="95%",height="100%",)
    tl.add(bar1,"今天")
    tl.add(bar1,"昨天")
    return tl
#=================添加Tab================
tab = Tab(page_title="公司",)
tab.add(bar1,"柱状图")
tab.add(pie_base(),"饼图")
tab.add(table_base(),"表格")
tab.add(tt(),"时间线")
tab.render('公司资源.html')
print("完成")
